/**
 * 反转链表第二种解法：递归法
 * @author junzhongliu
 * @date 2018/12/24 13:06
 */
public class ReverseList2 {
    public static void main(String[] args) {
        ListNode listNode1 = new ListNode(1);
        ListNode listNode2 = new ListNode(2);
        ListNode listNode3 = new ListNode(3);
        ListNode listNode4 = new ListNode(4);
        ListNode listNode5 = new ListNode(5);
        listNode1.setNext(listNode2);
        listNode2.setNext(listNode3);
        listNode3.setNext(listNode4);
        listNode4.setNext(listNode5);
        listNode5.setNext(null);
        System.out.println("原链表===="+ listNode1.toString());

        ListNode listNode = reverseList2(listNode1);
        System.out.println("反转之后的链表===="+ listNode.toString());
    }

    /**
     * 反转链表
     * @param head
     * @return
     */
    public static ListNode reverseList2(ListNode head){
        if(head==null || head.next==null){
            return head;
        }
        ListNode nextNode = head.next;
        //递归调用
        ListNode previous = reverseList2(nextNode);
        nextNode.next = head;
        head.next = null;
        return previous;
    }

}
